using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using MakeIT.Framework.Util;
using MakeIT.SGI.ERP.Entidades;
using MakeIT.SGI.ERP.Negocios;

namespace MakeIT.SGI.ERP.Apresentacao
{
	public partial class CadastroBanco : System.Web.UI.Page
	{

		UsuarioVO usuarioVO = null;
		protected SgiDAOT SgiDAOT = null;

		protected void Page_Load(object sender, EventArgs e)
		{
			this.SgiDAOT = new SgiDAOT();
			usuarioVO = (UsuarioVO)this.Session["userActive"];

			if (!IsPostBack)
			{
				Util.HabilitarCampos(false, this.panelCad);
				atualizarDdlIdFilial(null, null);

				this.panelCtacor.Enabled = false;
				atualizarDdlCtacorIdFilial(null, null);
				atualizarDdlCtacorIdCtaCorTipo(null, null);
			}

		}

		protected void Page_Unload(object sender, EventArgs e)
		{
			try
			{
				if (this.SgiDAOT != null)
					this.SgiDAOT.closeDAO();
			}
			catch (Exception ex) {}
		}

		protected void grvResultado_PageIndexChanging(object sender, GridViewPageEventArgs e)
		{
			this.grvResultado.PageIndex = e.NewPageIndex;
			btnPesquisa_Click(null, null);
		}
		protected void atualizarDdlIdFilial(object sender, ImageClickEventArgs e)
		{
			CarregaDDL.carregaFilial(this.SgiDAOT, this.ddlCadIdFilial);

			CarregaDDL.carregaFilial(this.SgiDAOT, this.ddlIdFilial);

		}

		protected void atualizarDdlCtacorIdFilial(object sender, ImageClickEventArgs e)
		{
			CarregaDDL.carregaFilial(this.SgiDAOT, this.ddlCadCtacorIdFilial);

		}

		protected void atualizarDdlCtacorIdCtaCorTipo(object sender, ImageClickEventArgs e)
		{
			List<CtacortipoVO> CtacoridCtaCorTipoCadVOs = new List<CtacortipoVO>();
			CtacoridCtaCorTipoCadVOs.AddRange(this.SgiDAOT.getCtacortipos());
			this.ddlCadCtacorIdCtaCorTipo.DataSource = CtacoridCtaCorTipoCadVOs;
			this.ddlCadCtacorIdCtaCorTipo.DataBind();

		}

		/// <summary>
		/// Manipula o evento do botão btnSalvar
		/// </summary>
		/// <param name="sender">Objeto disparador do evento</param>
		/// <param name="e">Argumento do evento</param>
		protected void btnSalvar_Click(object sender, EventArgs e)
		{

			//Declara objetos
			BancoVO bancoVO = null;
			bool novoRegistro = false;

			try
			{
				//Verifica se o ID é nulo, se sim = cadastro novo
				if (string.IsNullOrEmpty(this.txtCadIdBanco.Text))
				{
					bancoVO = BancoVO.CreateVO();
					bancoVO.cadastro = DateTime.Now;
					bancoVO.cadastradoPor = usuarioVO.user;

					novoRegistro = true;

				}
				//Recupera dados para serem alterados
				else
				{
					//Recupera dados
					bancoVO = this.SgiDAOT.getBanco(Int32.Parse(this.txtCadIdBanco.Text));
				}

				bancoVO.banco = this.txtCadBanco.Text;
				bancoVO.codigo = this.txtCadCodigo.Text;
				bancoVO.idFilial = Int32.Parse(this.ddlCadIdFilial.SelectedValue);
				bancoVO.edicao = DateTime.Now;
				bancoVO.editadoPor = usuarioVO.user;

				//Chama metodo para salvar ou criar novo registro
				if (novoRegistro)
					bancoVO.idBanco = (int)this.SgiDAOT.newBanco(bancoVO);
				else
					this.SgiDAOT.setBanco(bancoVO);

				// Exibe msg de sucesso ao salvar registro
				Util.ExibeAlert(this, "Registro salvo com sucesso!");

				//Popula grid atualizado
				this.btnPesquisa_Click(null, null);

				//Atualiza formulario, apos salvar os dados
				this.txtCadIdBanco.Text = bancoVO.idBanco.ToString();
				this.ltCadastradoPor.Text = bancoVO.cadastradoPor;
				this.ltEditadoPor.Text = bancoVO.editadoPor;
				this.ltDataCadastro.Text = bancoVO.cadastro.ToString("dd/MM/yyyy");
				this.ltDataEdicao.Text = bancoVO.edicao.ToString("dd/MM/yyyy");

				//habilita Ctacor
				if (!this.panelCtacor.Enabled)
				{
					this.ltCadCtacorBanco.Text = bancoVO.ToString();
					Util.HabilitarCampos(false, this.panelCtacor);
					this.panelCtacor.Enabled = true;
					this.btnCadCtacorSalvar.Enabled = false;
					this.btnCadCtacorEditar.Enabled = false;
					this.btnCadCtacorExcluir.Enabled = false;
					this.btnCadCtacorNovo.Enabled = true;
				}
			}
			catch (Exception ex)
			{

				throw ex;
			}
		}

		/// <summary>
		/// Manipula o evento do botão btnPesquisa
		/// </summary>
		/// <param name="sender">Objeto disparador do evento</param>
		/// <param name="e">Argumento do evento</param>
		protected void btnPesquisa_Click(object sender, EventArgs e)
		{

			//Declara objetos
			int? idBanco = null;
			string banco = null;
			string codigo = null;
			int? idFilial = null;

			try
			{

				if (!string.IsNullOrEmpty(this.txtIdBanco.Text))
				{
					idBanco = Int32.Parse(this.txtIdBanco.Text);
				}

				if (!string.IsNullOrEmpty(this.txtBanco.Text))
				{
					banco = this.txtBanco.Text;
				}

				if (!string.IsNullOrEmpty(this.txtCodigo.Text))
				{
					codigo = this.txtCodigo.Text;
				}

				if(!this.ddlIdFilial.SelectedValue.Equals("-1"))
				{
					idFilial = Int32.Parse(this.ddlIdFilial.SelectedValue);
				}


				//Recupera a lista de registros segundo a pesquisa
				this.grvResultado.DataSource = this.SgiDAOT.getBancos(idBanco, banco, idFilial, codigo);

				//Vincula os dados
				this.grvResultado.DataBind();
			}
			catch (Exception ex)
			{

				throw ex;
			}
		}

		/// <summary>
		/// Manipula o evento do botão btnCancelar
		/// </summary>
		/// <param name="sender">Objeto disparador do evento</param>
		/// <param name="e">Argumento do evento</param>
		protected void btnCancelar_Click(object sender, EventArgs e)
		{
			//Volta para a tab page de pesquisa
			//this.tabBanco.ActiveTabIndex = 0;

			// Desabilita os campos para edição
			Util.HabilitarCampos(false, this.panelCad);

			// Destrava botão de edição
			this.btnEditar.Enabled = (!string.IsNullOrEmpty(this.txtCadIdBanco.Text));

			// Destrava botão de exclusao
			this.btnExcluir.Enabled = (!string.IsNullOrEmpty(this.txtCadIdBanco.Text));

			// Detrava botão de novo
			this.btnNovo.Enabled = true;

			// Desabilita o botão salvar
			this.btnSalvar.Enabled = false;

		}

		protected void imgbVisualizar_Click(object sender, ImageClickEventArgs e)
		{
			// Declara objetos
			BancoVO bancoVO = null;
			int idBanco = 0;

			try
			{
				//Recupera os argumentos com o ID do objeto
				string[] argumentos = ((ImageButton)sender).CommandArgument.Split(';');
				idBanco = Int32.Parse(argumentos[0]);

				//Recupera o objeto
				bancoVO = this.SgiDAOT.getBanco(idBanco);

				this.txtCadIdBanco.Text = bancoVO.idBanco.ToString();
				this.txtCadBanco.Text = bancoVO.banco;
				this.txtCadCodigo.Text = bancoVO.codigo;
				this.ddlCadIdFilial.SelectedValue = bancoVO.idFilial.ToString();
				this.ltCadastradoPor.Text = bancoVO.cadastradoPor;
				this.ltEditadoPor.Text = bancoVO.editadoPor;
				this.ltDataCadastro.Text = bancoVO.cadastro.ToString("dd/MM/yyyy");
				this.ltDataEdicao.Text = bancoVO.edicao.ToString("dd/MM/yyyy");

				//recupera Ctacor
				Util.LimparCampos(this.panelCtacor);
				Util.HabilitarCampos(false, this.panelCtacor);
				this.panelCtacor.Enabled = true;
				this.ltCadCtacorBanco.Text = bancoVO.ToString();
				this.ltCtacorCadastradoPor.Text = "";
				this.ltCtacorDataCadastro.Text = "";
				this.ltCtacorDataEdicao.Text = "";
				this.ltCtacorEditadoPor.Text = "";
				this.btnCadCtacorSalvar.Enabled = false;
				this.btnCadCtacorEditar.Enabled = false;
				this.btnCadCtacorExcluir.Enabled = false;
				this.btnCadCtacorNovo.Enabled = true;
				this.grvCadBancoxCtacor.DataSource = this.SgiDAOT.getCtacors(null, null, null, bancoVO.idBanco, null, null, null);
				this.grvCadBancoxCtacor.DataBind();

				//Habilita tab page do cadastro
				this.tabBanco.ActiveTabIndex = 1;

				//Desabilita campos para edição
				Util.HabilitarCampos(false, this.panelCad);

				//Desabilita botão salvar
				this.btnSalvar.Enabled = false;

				//Habilita botão editar
				this.btnEditar.Enabled = true;

				//Habilita botão excluir
				this.btnExcluir.Enabled = true;

				//Habilita botão novo
				this.btnNovo.Enabled = true;

			}
			catch (Exception ex)
			{

				throw ex;
			}
		}

		// <summary>
		// Manipula o evento editar do web form
		// </summary>
		// <param name="sender">Objeto disparador de evento</param>
		// <param name="e">Argumento do evento</param>
		protected void btnEditar_Click(object sender, EventArgs e)
		{
			// Habilita os campos para edição
			Util.HabilitarCampos(true, this.panelCad);

			// Trava apenas os text box da PK
			this.txtCadIdBanco.Enabled = false;

			// Trava botão de edição
			this.btnEditar.Enabled = false;

			// Trava botão de exclusao
			this.btnExcluir.Enabled = false;

			// Trava botão de novo
			this.btnNovo.Enabled = false;

			// Habilita o botão salvar
			this.btnSalvar.Enabled = true;

			this.txtCadBanco.Focus();
		}

		protected void btnNovo_Click(object sender, EventArgs e)
		{
			//Limpa formulario, para a entrada de novo registro
			Util.LimparCampos(this.panelCad);
			// Habilita os campos para edição
			Util.HabilitarCampos(true, this.panelCad);

			this.ltCadastradoPor.Text = "";
			this.ltEditadoPor.Text = "";
			this.ltDataCadastro.Text = "";
			this.ltDataEdicao.Text = "";

			// Limpa Ctacor
			Util.LimparCampos(this.panelCtacor);
			Util.HabilitarCampos(false, this.panelCtacor);
			this.ltCadCtacorBanco.Text = "";
			this.ltCtacorCadastradoPor.Text = "";
			this.ltCtacorDataCadastro.Text = "";
			this.ltCtacorDataEdicao.Text = "";
			this.ltCtacorEditadoPor.Text = "";
			this.grvCadBancoxCtacor.DataSource = null;
			this.grvCadBancoxCtacor.DataBind();
			this.panelCtacor.Enabled = false;
			this.btnCadCtacorSalvar.Enabled = false;
			this.btnCadCtacorEditar.Enabled = false;
			this.btnCadCtacorExcluir.Enabled = false;
			this.btnCadCtacorNovo.Enabled = false;

			// Trava apenas os text box da PK
			this.txtCadIdBanco.Enabled = false;

			// Trava botão de edição
			this.btnEditar.Enabled = false;

			// Trava botão de exclusao
			this.btnExcluir.Enabled = false;

			// Trava botão de novo
			this.btnNovo.Enabled = false;

			// Habilita o botão salvar
			this.btnSalvar.Enabled = true;

			this.txtCadBanco.Focus();

		}

		protected void btnExcluir_Click(object sender, EventArgs e)
		{
			//Declara objetos
			BancoVO bancoVO = null;

			try
			{
				//Cria objeto
				bancoVO = BancoVO.CreateVO();
				bancoVO.idBanco = Int32.Parse(this.txtCadIdBanco.Text);

				// Remove Ctacor
				List<CtacorVO> ctacorVOs = SgiDAOT.getCtacors(null, null, null, bancoVO.idBanco, null, null, null);
				foreach (CtacorVO ctacorVO in ctacorVOs)
					this.SgiDAOT.delCtacor(ctacorVO);

				//Chama metodo para excluir registro
				this.SgiDAOT.delBanco(bancoVO);

				// Exibe msg de sucesso ao salvar registro
				Util.ExibeAlert(this, "Registro excluido com sucesso!");

				//Popula grid atualizado
				this.btnPesquisa_Click(null, null);

				//Limpa formulario, apos salvar os dados
				Util.LimparCampos(this.panelCad);
				//Limpa Ctacor
				Util.LimparCampos(this.panelCtacor);
				Util.HabilitarCampos(false, this.panelCtacor);
				this.panelCtacor.Enabled = false;
				this.ltCadCtacorBanco.Text = "";
				this.ltCtacorCadastradoPor.Text = "";
				this.ltCtacorDataCadastro.Text = "";
				this.ltCtacorDataEdicao.Text = "";
				this.ltCtacorEditadoPor.Text = "";
				this.grvCadBancoxCtacor.DataSource = null;
				this.grvCadBancoxCtacor.DataBind();
				this.btnCadCtacorSalvar.Enabled = false;
				this.btnCadCtacorEditar.Enabled = false;
				this.btnCadCtacorExcluir.Enabled = false;
				this.btnCadCtacorNovo.Enabled = false;

				this.ltCadastradoPor.Text = "";
				this.ltEditadoPor.Text = "";
				this.ltDataCadastro.Text = "";
				this.ltDataEdicao.Text = "";

				// Trava botão de edição
				this.btnEditar.Enabled = false;

				// Trava botão de exclusao
				this.btnExcluir.Enabled = false;

				// Desabilita o botão salvar
				this.btnSalvar.Enabled = false;

				// Habilita o botao novo
				this.btnNovo.Enabled = true;

			}
			catch (Exception ex)
			{

				throw ex;
			}
			
		}
		#region BancoXCtacor
		protected void btnCadCtacorSalvar_Click(object sender, EventArgs e)
		{

			//Declara objetos
			CtacorVO ctacorVO = null;
			bool novoRegistro = false;

			try
			{
				//Verifica se o ID é nulo, se sim = cadastro novo
				if (string.IsNullOrEmpty(this.txtCadCtacorIdCtaCor.Text))
				{
					ctacorVO = CtacorVO.CreateVO();
					ctacorVO.cadastro = DateTime.Now;
					ctacorVO.cadastradoPor = usuarioVO.user;

					novoRegistro = true;

				}
				//Recupera dados para serem alterados
				else
				{
					//Recupera dados
					ctacorVO = this.SgiDAOT.getCtacor(Int32.Parse(this.txtCadCtacorIdCtaCor.Text));
				}

				ctacorVO.ctaCor = this.txtCadCtacorCtaCor.Text;
				ctacorVO.idFilial = Int32.Parse(this.ddlCadCtacorIdFilial.SelectedValue);
				ctacorVO.idBanco = Int32.Parse(this.txtCadIdBanco.Text);
				ctacorVO.agencia = this.txtCadCtacorAgencia.Text;
				ctacorVO.conta = this.txtCadCtacorConta.Text;
				ctacorVO.idCtaCorTipo = Int32.Parse(this.ddlCadCtacorIdCtaCorTipo.SelectedValue);
				ctacorVO.edicao = DateTime.Now;
				ctacorVO.editadoPor = usuarioVO.user;

				//Chama metodo para salvar ou criar novo registro
				if (novoRegistro)
					ctacorVO.idCtaCor = (int)this.SgiDAOT.newCtacor(ctacorVO);
				else
					this.SgiDAOT.setCtacor(ctacorVO);

				// Exibe msg de sucesso ao salvar registro
				Util.ExibeAlert(this, "Registro salvo com sucesso!");

				//Popula grid atualizado
				this.btnPesquisa_Click(null, null);

				//Atualiza formulario, apos salvar os dados
				this.txtCadCtacorIdCtaCor.Text = ctacorVO.idCtaCor.ToString();
				this.ltCtacorCadastradoPor.Text = ctacorVO.cadastradoPor;
				this.ltCtacorEditadoPor.Text = ctacorVO.editadoPor;
				this.ltCtacorDataCadastro.Text = ctacorVO.cadastro.ToString("dd/MM/yyyy");
				this.ltCtacorDataEdicao.Text = ctacorVO.edicao.ToString("dd/MM/yyyy");

				this.grvCadBancoxCtacor.DataSource = this.SgiDAOT.getCtacors(null, null, null, null, null, null, null);
				this.grvCadBancoxCtacor.DataBind();

			}
			catch (Exception ex)
			{

				throw ex;
			}
		}

		protected void btnCadCtacorCancelar_Click(object sender, EventArgs e)
		{
			//Volta para a tab page de pesquisa
			//this.tabBanco.ActiveTabIndex = 0;

			// Desabilita os campos para edição
			Util.HabilitarCampos(false, this.panelCtacor);

			// Destrava botão de edição
			this.btnCadCtacorEditar.Enabled = (!string.IsNullOrEmpty(this.txtCadCtacorIdCtaCor.Text));

			// Destrava botão de exclusao
			this.btnCadCtacorExcluir.Enabled = (!string.IsNullOrEmpty(this.txtCadCtacorIdCtaCor.Text));

			// Detrava botão de novo
			this.btnCadCtacorNovo.Enabled = true;

			// Desabilita o botão salvar
			this.btnCadCtacorSalvar.Enabled = false;

		}

		protected void btnCadCtacorEditar_Click(object sender, EventArgs e)
		{
			// Habilita os campos para edição
			Util.HabilitarCampos(true, this.panelCtacor);

			// Trava apenas os text box da PK
			this.txtCadCtacorIdCtaCor.Enabled = false;

			// Trava botão de edição
			this.btnCadCtacorEditar.Enabled = false;

			// Trava botão de exclusao
			this.btnCadCtacorExcluir.Enabled = false;

			// Trava botão de novo
			this.btnCadCtacorNovo.Enabled = false;

			// Habilita o botão salvar
			this.btnCadCtacorSalvar.Enabled = true;

			this.txtCadCtacorCtaCor.Focus();
		}

		protected void btnCadCtacorExcluir_Click(object sender, EventArgs e)
		{
			//Declara objetos
			CtacorVO ctacorVO = null;

			try
			{
				//Cria objeto
				ctacorVO = CtacorVO.CreateVO();
				ctacorVO.idCtaCor = Int32.Parse(this.txtCadCtacorIdCtaCor.Text);

				//Chama metodo para excluir registro
				this.SgiDAOT.delCtacor(ctacorVO);

				// Exibe msg de sucesso ao salvar registro
				Util.ExibeAlert(this, "Registro excluido com sucesso!");

				//Limpa formulario, apos salvar os dados
				Util.LimparCampos(this.panelCtacor);
				Util.HabilitarCampos(false, this.panelCtacor);
				this.grvCadBancoxCtacor.DataSource = this.SgiDAOT.getCtacors(null, null, null, null, null, null, null);
				this.grvCadBancoxCtacor.DataBind();

				this.ltCtacorCadastradoPor.Text = "";
				this.ltCtacorEditadoPor.Text = "";
				this.ltCtacorDataCadastro.Text = "";
				this.ltCtacorDataEdicao.Text = "";

				// Trava botão de edição
				this.btnCadCtacorEditar.Enabled = false;

				// Trava botão de exclusao
				this.btnCadCtacorExcluir.Enabled = false;

				// Desabilita o botão salvar
				this.btnCadCtacorSalvar.Enabled = false;

				// Habilita o botao novo
				this.btnCadCtacorNovo.Enabled = true;

			}
			catch (Exception ex)
			{

				throw ex;
			}
			
		}
		protected void btnCadCtacorNovo_Click(object sender, EventArgs e)
		{
			//Limpa formulario, para a entrada de novo registro
			Util.LimparCampos(this.panelCtacor);
			// Habilita os campos para edição
				Util.HabilitarCampos(true, this.panelCtacor);

			this.ltCtacorCadastradoPor.Text = "";
			this.ltCtacorEditadoPor.Text = "";
			this.ltCtacorDataCadastro.Text = "";
			this.ltCtacorDataEdicao.Text = "";

			// Trava apenas os text box da PK
			this.txtCadCtacorIdCtaCor.Enabled = false;

			// Trava botão de edição
			this.btnCadCtacorEditar.Enabled = false;

			// Trava botão de exclusao
			this.btnCadCtacorExcluir.Enabled = false;

			// Trava botão de novo
			this.btnCadCtacorNovo.Enabled = false;

			// Habilita o botão salvar
			this.btnCadCtacorSalvar.Enabled = true;

			this.txtCadCtacorCtaCor.Focus();

		}

		protected void imgbCadCtacorVisualizar_Click(object sender, ImageClickEventArgs e)
		{
			// Declara objetos
			CtacorVO ctacorVO = null;
			int idCtaCor = 0;

			try
			{
				//Recupera os argumentos com o ID do objeto
				string[] argumentos = ((ImageButton)sender).CommandArgument.Split(';');
				idCtaCor = Int32.Parse(argumentos[0]);

				//Recupera o objeto
				ctacorVO = this.SgiDAOT.getCtacor(idCtaCor);

				this.txtCadCtacorIdCtaCor.Text = ctacorVO.idCtaCor.ToString();
				this.txtCadCtacorCtaCor.Text = ctacorVO.ctaCor;
				this.ddlCadCtacorIdFilial.SelectedValue = ctacorVO.idFilial.ToString();
				this.txtCadCtacorAgencia.Text = ctacorVO.agencia;
				this.txtCadCtacorConta.Text = ctacorVO.conta;
				this.ddlCadCtacorIdCtaCorTipo.SelectedValue = ctacorVO.idCtaCorTipo.ToString();
				this.ltCtacorCadastradoPor.Text = ctacorVO.cadastradoPor;
				this.ltCtacorEditadoPor.Text = ctacorVO.editadoPor;
				this.ltCtacorDataCadastro.Text = ctacorVO.cadastro.ToString("dd/MM/yyyy");
				this.ltCtacorDataEdicao.Text = ctacorVO.edicao.ToString("dd/MM/yyyy");

				//Desabilita campos para edição
				Util.HabilitarCampos(false, this.panelCtacor);

				//Desabilita botão salvar
				this.btnCadCtacorSalvar.Enabled = false;

				//Habilita botão editar
				this.btnCadCtacorEditar.Enabled = true;

				//Habilita botão excluir
				this.btnCadCtacorExcluir.Enabled = true;

				//Habilita botão novo
				this.btnCadCtacorNovo.Enabled = true;

			}
			catch (Exception ex)
			{

				throw ex;
			}
		}

		#endregion

	}
}
